<?php
        include_once 'xmlrpc.inc';
	include_once 'Session.php';
	class Itinerario {
		private $itinerario;
		private $travel_info;
		public function __construct($itinerario, $travel_info)
		{
			$this->itinerario = $itinerario;
			$this->travel_info = $travel_info;
		}
		public function getIdItinerario()
		{
			return $this->itinerario['id_itinerario'];
		}
		public function getDescrizione()
		{
			return $this->itinerario['descrizione'];
		}
		public function getTravelInfo()
		{
			return $this->travel_info;
		}
	};
	class TravelInfo {
		private $travel_out;
		public function __construct($travel_out)
		{
			$this->travel_out = $travel_out;
		}
		public function getIdTratta()
		{	
			return $this->travel_out['id_tratta'];
		}
		public function getDescrizione()
		{
			return $this->travel_out['descrizione'];
		}
		public function getStato()
		{
			return $this->travel_out['stato'];
		}
		public function getOrario()
		{
			return $this->travel_out['orario'];
		}
		public function getTempoPercorrenza()
		{
			return $this->travel_out['tempo_percorrenza'];
		}

	}
	
	class ItinerarioInfo {
		private $itinerario_out;
	
		public function __construct($itinerario_out)
		{
			$this->itinerario_out = $itinerario_out;
		}
	}
	class TravelTime {
		private $token_id;
		private $url_travel_service;

		public function __construct() {
			$this->url_travel_service = new xmlrpc_client("http://muovi.roma.it/ws/xml/tempi/1");
			$this->token_id = $_SESSION['token_id'];
		} 


		public function getListaTratte() {
			$travel_req = new xmlrpcmsg('tempi.ListaTratte', array( new xmlrpcval($this->token_id, "string")));
			$result = $this->url_travel_service->send($travel_req);
			
			$travel_info_out = array();
			if (!$result->faultCode())
			{
				$value_travel_resp = $result->value();
				$resp = $value_travel_resp->structMem("risposta");
				for ($i = 0; $i < $resp->arraySize(); $i++)
				{
					$val = $resp->arrayMem($i);
					$id_tratta = $val->structMem("id_tratta")->scalarVal();
					$descrizione = $val->structMem("descrizione")->scalarVal();
					$stato = $val->structMem("stato")->scalarVal();
					$orario = $val->structMem("orario")->scalarVal();
					$tempo_percorrenza = $val->structMem("tempo_percorrenza")->scalarVal();
					$n = array("id_tratta"=>$id_tratta,"descrizione"=>$descrizione,"stato"=>$stato, "orario"=>$orario, "tempo_percorrenza"=>$tempo_percorrenza); 
					$travel_info = new TravelInfo($n);
					$travel_info_out[] = $travel_info;
				}
			}
			else
			{
				throw new Exception("Errore richiesta parcheggi<br/>");
			}
			return $travel_info_out;
		}


		public function getListaItinerari() {
                        $travel_req = new xmlrpcmsg('tempi.ListaItinerari', array( new xmlrpcval($this->token_id, "string")));
                        $result = $this->url_travel_service->send($travel_req);

			$itinerario_out = array();
                        if (!$result->faultCode())
                        {
                                $value_travel_resp = $result->value();
                                $resp = $value_travel_resp->structMem("risposta");
                                for ($i = 0; $i < $resp->arraySize(); $i++)
                                {
                                        $val = $resp->arrayMem($i);
                                        $id_itinerario = $val->structMem("id_itinerario")->scalarVal();
                                        $descrizione = $val->structMem("descrizione")->scalarVal();
                                        $tempo_percorrenza = $val->structMem("tempo_percorrenza")->scalarVal();
                                        $tratte = $val->structMem("tratte");
					$itinerario_array = array("id_itinerario"=>$id_itinerario, "descrizione"=>$descrizione, "tempo_percorrenza"=>$tempo_percorrenza);
                        		$travel_info_out = array();
					for ($j = 0; $j < $tratte->arraySize(); $j++)
					{
						$val_tratta = $tratte->arrayMem($j);
						$id_tratta = $val_tratta->structMem("id_tratta")->scalarVal();
						$descrizione = $val_tratta->structMem("descrizione")->scalarVal();
						$stato = $val_tratta->structMem("stato")->scalarVal();
						$orario = $val_tratta->structMem("orario")->scalarVal();
						$tempo_percorrenza = $val_tratta->structMem("tempo_percorrenza")->scalarVal();

			                        $a = array("id_tratta"=>$id_tratta,"descrizione"=>$descrizione,"stato"=>$stato, "orario"=>$orario, "tempo_percorrenza"=>$tempo_percorrenza);
                                        	$travel_info_out[] = new TravelInfo($a);
					}
					$itinerario = new Itinerario($itinerario_array, $travel_info_out);
					$itinerario_out[] = $itinerario;
                                }
                        }
                        else
                        {
                                throw new Exception("Errore richiesta parcheggi");
                        }
                        return $itinerario_out;
                }

		
	}
?>
